class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        //因为要删最左边和最右边  删最少个
        //题目转化为：在数组中间，就是找最长连续子数组 让和=total-x
        int left=0,right=0,len=-1,n=nums.size();
        int total=0,sum=0;
        //计算总和
        for(int i=0;i<n;i++)
        {
            total+=nums[i];
        }
        int tem=total-x;
        //不管怎么减 都不够
        if(tem<0) 
            return -1;
        while(right<n)
        {   
            sum+=nums[right];       //进窗口 
            while(sum>tem)          //判断
            {  
                sum-=nums[left];  //出窗口
                left++;
            }
            //出到和
            if(sum==tem)  
                len=max(len,right-left+1);   //更新
            right++;
        }
        //没有找到
        if(len==-1) 
            return -1;
        else    //len是最长连续子数组的
            return n-len;
    }
};